package com.xbongbong.pro.formdata.pojo;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.pojo.dto.AddBatchDTO;
import com.xbongbong.paas.pojo.dto.ValidateDataDTO;
import com.xbongbong.pro.invoice.pojo.InvoiceSpecialParamPojo;
import com.xbongbong.pro.product.pojo.ProductWarehouseSavePojo;
import com.xbongbong.pro.product.pojo.dto.BeforeSaveMyTeamDTO;
import com.xbongbong.pro.team.TeamAfterVerifyDTO;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * saas需要冗余的属性用来保存参数
 *
 * @author feng.zheng
 * @version v1.0
 * @date 2019/2/23 14:02
 * @since v1.0
 */
@Getter
@Setter
@ToString
public class SaasNeedRedundantAttrPojo implements Serializable {

    private static final long serialVersionUID = 6249066381300526778L;
    /**
     * 是否是关联新建
     */
    private Integer isRelationItem;

    /**
     * 关联新建的实体需要新建的validationDTO
     */
    private List<ValidateDataDTO> needAddValidateDataDTO;

    /**
     * 关联新建的实体需要删除的validationDTO
     */
    private List<ValidateDataDTO> needDelValidateDataDTO;

    /**
     * 关联新建的实体需要更新的validationDTO
     */
    private List<ValidateDataDTO> needUpdateValidateDataDTO;

    /**
     * 联系人电话集合
     */
    private List<String> contactPhoneList;
    /**
     * 回款付款新建编辑
     */
    private AddBatchDTO addBatchDTO;
    /**
     * 回款单新建编辑
     */
    private AddBatchDTO addPaymentSheetBatchDTO;
    /**
     * 预付款核销新建编辑
     */
    private AddBatchDTO addWriteOffPrepaymentBatchDTO;
    /**
     * 是否有应收款
     */
    private boolean isHasPayment;
    /**
     * 是否有合同
     */
    private boolean isHasContract;
    /**
     * 是否合同合并开票
     */
    private boolean isContractUnion;
    /**
     * 是否回款单合并开票
     */
    private boolean isPaymentUnion;

    /**
     * 是否回款单合并开票
     */
    private boolean isPaymentSheetUnion;
    /**
     * 是否有回款单
     */
    private boolean isHasPaymentSheet;
    /**
     * 是否是预收款回款单
     */
    private boolean isPrePaymentSheet;

    private boolean isPrePaymentSheetUnion;
    /**
     * 进项发票相关 是否有采购发票
     */
    private boolean isHasPurchase;

    /**
     * 进项发票相关 是否合并采购发票
     */
    private boolean isPurchaseUnion;
    /**
     * 进项发票相关 是否有付款计划
     */
    private boolean isHasPayPlan;
    /**
     * 进项发票相关 是否合并付款计划发票
     */
    private boolean isPayPlanUnion;
    /**
     * 进项发票相关 是否有付款单
     */
    private boolean isHasPaySheet;
    /**
     * 进项发票相关 是否合并付款单发票
     */
    private boolean isPaySheetUnion;

    /**
     * 进项发票相关 是否有预收款单
     */
    private boolean isPrePaySheet;

    private boolean isPrePaySheetUnion;
    /**
     * 合同金额、采购金额
     */
    private Double parentAmount;
    /**
     * 发起新建操作所在的业务
     */
    private Integer parentBusinessType;
    /**
     * 发起新建操作所在的业务的数据id
     */
    private Long parentId;

    /**
     * 退货退款产品放辅助
     */
    private JSONArray productArray;
    /**
     * 特殊回参（合同产品和其它费用放一起）
     */
    private JSONObject contractProduct;
    /**
     * 跟进备注
     */
    @Length(max = 2000, message = "跟进记录内容不超过2000个字符！")
    private String memo;

    /**
     * 艾特的用户id
     */
    private List<String> atUserIds;

    /**
     * 合同新建回款把合同id传过去
     */
    private Long linkItemFormId;
    /**
     * 协同团队
     */
    private BeforeSaveMyTeamDTO beforeSaveMyTeamDTO;
    /**
     * 金额明细
     */
    private JSONArray amountDetail;

    /**
     * 退货退款中的回款单审批和发票审批需要的退货退款ID
     */
    private Long refundId;

    /**
     * 采购退货中的付款单审批和发票审批需要的采购退货ID
     */
    private Long returnedPurchaseId;

    private Map<String,Boolean> attrCanSeeMap;

    private ProductWarehouseSavePojo productWarehouseSavePojo;

    /**
     * 是否从销项发票关联合同按钮进来
     */
    private InvoiceSpecialParamPojo invoiceSpecialParamPojo;

    private TeamAfterVerifyDTO teamAfterVerifyDTO;

    public Boolean getAttrCanSee(String attr){
        if (Objects.isNull(this.attrCanSeeMap)){
            return false;
        }
        if (this.attrCanSeeMap.containsKey(attr)){
            return this.attrCanSeeMap.get(attr);
        }
        return false;
    }
}
